// Package unknownproto implements functionality to "type check" protobuf serialized byte sequences
// against an expected proto.Message to report:
//
// a) Unknown fields in the stream -- this is indicative of mismatched services, perhaps a malicious actor
//
// b) Mismatched wire types for a field -- this is indicative of mismatched services
//
// Its API signature is similar to proto.Unmarshal([]byte, proto.Message) in the strict case
//
//	if err := RejectUnknownFieldsStrict(protoBlob, protoMessage, false); err != nil {
//	        // Handle the error.
//	}
//
// and ideally should be added before invoking proto.Unmarshal, if you'd like to enforce the features mentioned above.
//
// By default, for security we report every single field that's unknown, whether a non-critical field or not. To customize
// this behavior, please set the boolean parameter allowUnknownNonCriticals to true to RejectUnknownFields:
//
//	if err := RejectUnknownFields(protoBlob, protoMessage, true); err != nil {
//	        // Handle the error.
//	}
package unknownproto
